博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSH案例--入门级
阅读量:4692 次
发布时间:2019-06-09

本文共 17131 字,大约阅读时间需要 57 分钟。

1.项目功能展示

(1)注册

  

(2)修改地址与级别信息,点击修改

   

(3)再添加一位成员,进行删除

点击第二行的删除

(4)登录模块测试

输入数据库中没有的信息:

输入数据库中存在的信息:

  

2. Web.xml

  Spring提供了ContextLoaderListener,该监听器实现了ServletContextListener接口,他在Web应用程序启动时被触发。当他创建时会自动查找WEB-INF/下的applicationContext.xml,所以当只有一个配置文件且文件名为applicationContext.xml时,则只需要在web.xml文件中配置ContextLoaderListener监听器即可.当有多个配置文件需要载入,则应该使用<context-param>元素指定配置文件的文件名,ContextLoaderListener加载时,会查找名为contextConfigLocation的初始化参数。当Web应用程序启动时先读取web.xml文件,然后创建spring容器,之后根据配置文件内容,装配Bean实例。

ssh
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
/WEB-INF/applicationContext.xml
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
View Code

3. 实体类与其映射文件

(1)Member.java

package com.entity;public class Member {    private long id;    private String name;    private String password;    private String address;    private String email;    private int level;    public Member(){}    public Member(String name,String password,String address,String email,int level){        this.name = name;        this.password = password;        this.address = address;        this.email = email;        this.level = level;    }    public long getId() {        return id;    }    public void setId(long id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public int getLevel() {        return level;    }    public void setLevel(int level) {        this.level = level;    }    }
View Code

(2)Member.hbm.xml

View Code

4.DAO层

(1)接口MemberDAO.java

package com.dao;import java.util.List;import com.entity.Member;public interface MemberDAO {    public void add(Member member);    public void update(Member member);    public void delete(long id);    public Member findByName(String name,String password);    public Member findById(long id);    public List
findAll();}
View Code

(2)实现类MemberDAOImpl.java(sessionFactory通过构造方法注入,使其可以操作数据库)

package com.dao;import java.util.List;import com.entity.Member;import org.hibernate.*;import org.springframework.beans.factory.annotation.Autowired;public class MemberDAOImpl implements MemberDAO {        private SessionFactory sessionFactory;        //构造方法注入SessionFactory对象    public MemberDAOImpl(SessionFactory sessionFactory) {        this.sessionFactory=sessionFactory;    }        //使用SessionFactory对象返回Session对象    public Session currentSession(){        return sessionFactory.openSession();    }    @Override    public void add(Member member) {        Session session=null;        try {            session=currentSession();            Transaction tx = session.beginTransaction();            session.save(member);            tx.commit();        } catch (HibernateException e) {            e.printStackTrace();        }finally{            session.close();        }    }    @Override    public void update(Member member) {        Session session=null;        try {            session=currentSession();            Transaction tx = session.beginTransaction();            session.update(member);            tx.commit();        } catch (HibernateException e) {            e.printStackTrace();        }finally{            session.close();        }    }    @Override    public void delete(long id) {        Session session=null;        try {            session=currentSession();            Transaction tx = session.beginTransaction();            Member mb = (Member)session.get(Member.class, id);            session.delete(mb);            tx.commit();        } catch (HibernateException e) {            e.printStackTrace();        }finally{            session.close();        }    }    @Override    public Member findByName(String name, String password) {        Session session=null;        Member result = null;        try {            session=currentSession();            Transaction tx = session.beginTransaction();            String hsql = " from Member m where m.name = :mname and m.password = :mpassword";            Query query = session.createQuery(hsql);            query.setParameter("mname", name);            query.setParameter("mpassword", password);            result = (Member)query.uniqueResult();            tx.commit();        } catch (HibernateException e) {            e.printStackTrace();        }finally{            session.close();        }        return result;    }    @Override    public Member findById(long id) {        Session session=null;        Member result = null;        try {            session=currentSession();            Transaction tx = session.beginTransaction();            String hsql = " from Member m where m.id = :id";            Query query = session.createQuery(hsql);            query.setParameter("id",id);            result = (Member)query.uniqueResult();            tx.commit();        } catch (HibernateException e) {            e.printStackTrace();        }finally{            session.close();        }        return result;    }    @Override    public List
findAll() { Session session=null; List
list = null; try { session=currentSession(); Transaction tx = session.beginTransaction(); String hsql = " from Member"; Query query = session.createQuery(hsql); list = query.list(); tx.commit(); } catch (HibernateException e) { e.printStackTrace(); }finally{ session.close(); } return list; }}
View Code

5.业务逻辑层

(1)接口MemberService.java

package com.service;import java.util.List;import com.entity.Member;public interface MemberService {    public void add(Member member);    public void update(Member member);    public void delete(long id);    public Member findByName(String name,String password);    public Member findById(long id);    public List
findAll();}
View Code

(2)实现类MemberServiceImpl.java(设值注入DAO层组件)

package com.service;import java.util.List;import com.dao.MemberDAO;import com.entity.Member;public class MemberServiceImpl implements MemberService {    private MemberDAO memberDao;    //设值注入DAO对象    public void setMemberDao(MemberDAO memberDao) {        this.memberDao = memberDao;    }    @Override    public void add(Member member) {        if(memberDao.findById(member.getId())==null)            memberDao.add(member);    }    @Override    public void update(Member member) {        if(memberDao.findById(member.getId())!=null)            memberDao.update(member);    }    @Override    public void delete(long id) {        if(memberDao.findById(id)!=null)            memberDao.delete(id);    }    @Override    public Member findByName(String name, String password) {        return memberDao.findByName(name, password);    }    @Override    public Member findById(long id) {        return memberDao.findById(id);    }    @Override    public List
findAll() { return memberDao.findAll(); }}
View Code

6. Action类

(1)注册MemberRegisterAction.java(设值注入业务逻辑组件)

package com.action;import com.entity.Member;import com.opensymphony.xwork2.ActionSupport;import com.service.MemberService;public class MemberRegisterAction extends ActionSupport {    private Member member;    private MemberService memberService;    public Member getMember() {        return member;    }    public void setMember(Member member) {        this.member = member;    }    //注入业务逻辑组件    public void setMemberService(MemberService memberService) {        this.memberService = memberService;    }    public String execute(){        memberService.add(member);        return SUCCESS;    }    }
View Code

(2)删除MemberDeleteAction.java(设置注入业务逻辑组件,注意传入参数id的相应getter和setter方法)

package com.action;import com.opensymphony.xwork2.ActionSupport;import com.service.MemberService;public class MemberDeleteAction extends ActionSupport {    private MemberService memberService;    public void setMemberService(MemberService memberService) {        this.memberService = memberService;    }        private long id;    public long getId() {        return id;    }    public void setId(long id) {        this.id = id;    }    public String execute(){        memberService.delete(getId());        return SUCCESS;    }}
View Code

(3)查询MemberQueryAction.java(用于查看所有会员信息)

package com.action;import java.util.List;import org.apache.struts2.ServletActionContext;import com.entity.Member;import com.opensymphony.xwork2.ActionSupport;import com.service.MemberService;public class MemberQueryAction extends ActionSupport {    private MemberService memberService;    public void setMemberService(MemberService memberService) {        this.memberService = memberService;    }    public String execute(){        List
list = memberService.findAll(); ServletActionContext.getRequest().setAttribute("memberList", list); return SUCCESS; }}
View Code

(4)修改MemberUpdateAction.java(有两个方法,execute()和showMember(),当需要修改时,showMember()方法转向update.jsp.并设置好需要修改的对象,修改完成之后,由spring托管的memberUpdateAction组件执行execute方法进行update操作)

package com.action;import com.entity.Member;import com.opensymphony.xwork2.ActionSupport;import com.service.MemberService;public class MemberUpdateAction extends ActionSupport {    private MemberService memberService;    private Member member;    private long id;    public void setMemberService(MemberService memberService) {        this.memberService = memberService;    }    public Member getMember() {        return member;    }    public void setMember(Member member) {        this.member = member;    }    public long getId() {        return id;    }    public void setId(long id) {        this.id = id;    }    public String showMember(){        Member mb = memberService.findById(getId());        setMember(mb);        return SUCCESS;    }    public String execute(){        memberService.update(member);        return SUCCESS;    }}
View Code

(5)登录MemberLoginAction.java(将输入的信息与数据库中进行比较)

package com.action;import com.entity.Member;import com.opensymphony.xwork2.ActionSupport;import com.service.MemberService;public class MemberLoginAction extends ActionSupport {    private Member member;    private MemberService memberService;    public Member getMember() {        return member;    }    public void setMember(Member member) {        this.member = member;    }    //注入业务逻辑组件    public void setMemberService(MemberService memberService) {        this.memberService = memberService;    }        public String execute(){        Member mb =memberService.findByName(member.getName(), member.getPassword());        if(mb!=null)            return SUCCESS;        else            return ERROR;    }}
View Code

7.struts.xml

  spring托管将Struts2中的Action的实例化工作交由Spring容器统一管理,同时使Struts2中的Action实例能够访问Spring提供的业务逻辑资源,spring容器依赖注入的优势也可以体现,Struts2提供的spring插件struts2-spring-plugin-2.3.16.3.jar配合<constant name="struts.objectFactory" value="spring">使得Struts2的action由Spring来负责进行实例化.

/memberQuery
/welcome.jsp
/register.jsp
/displayAll.jsp
/memberQuery
/update.jsp
/memberQuery
View Code

8.applicationContext.xml

  spring 框架提供了多种数据源类,可以使用spring提供的DriverManagerDataSource类还可以使用第三方数据源,如C3P0的ComboPooledDataSource数据源类,注意相应的两个jar包c3p0-0.9.2.1.jar mchange-commons-java-0.2.3.4.jar.

  Hibernate4已经完全实现自己的事物管理,所以spring4不提供HibernateDaoSupport和HibernateTemplete的支持。可以在应用程序的spring上下文中,像配置其他bean那样来配置HibernateSession工厂。如果要使用XML文件定义对象与数据库之间的映射,则需要在spring中配置LocalSessionFactoryBean。hibernateProperties属性配置了Hibernate如何进行操作的细节。"hibernate.current_session_context_class"是为当前Session提供一个策略,Session由org.springframework.orm.hibernate4.SpringSessionContext.currentSession得到。将sessionFactory注入到其他Bean中,如注入到DAO组件中,使其获得SessionFactory的引用后,就可以实现对数据库的访问。

com/entity/Member.hbm.xml
true
update
false
org.springframework.orm.hibernate4.SpringSessionContext
org.hibernate.dialect.MySQLDialect
View Code

9.jsp

(1)注册register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
会员注册页面

View Code

(2)所有会员信息displayAll.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
显示会员信息

会员信息

会员id 会员名 密码 地址 邮箱 级别 删除 修改
">删除
">修改
返回注册页面
View Code

(3)修改页面update.jsp

  注意:不允许修改会员id,当需要将会员id传递给更新会员动作,所以使用隐藏表单域标签来接收显示会员页面传递来的会员id在update.jsp页面提交时再传递给更新会员的动作memberUpdate。

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
修改会员信息

View Code

(4)登录login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
会员登录
View Code

(5)welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
贵宾你好! 合法成员
View Code

 

10. END

  github地址:(https://github.com/byzhaozihan/s2sh_entry-level)

  本篇案例算是最简单的ssh整合,注入形式也都一目了然,如果对你有帮助,请点赞或关注我,谢谢观看!

转载于:https://www.cnblogs.com/zhaozihan/p/5893785.html

你可能感兴趣的文章
中国城市json
查看>>
android下载手动下载Android SDK
查看>>
北京邮电大学 程序设计课程设计 电梯 文件输入版本(已调试,大致正确运行==)...
查看>>
C++学习:任意合法状态下汉诺塔的移动(原创)
查看>>
学霸修炼的秘籍
查看>>
Duplicate 复制数据库 搭建Dataguard
查看>>
leetcode133 - Clone Graph - medium
查看>>
Mybatis(一)入门
查看>>
DDR工作原理(转)
查看>>
(Frontend Newbie) Web三要素(一)
查看>>
(转载-学习)python wsgi 简介
查看>>
QPushButton 控制两种状态
查看>>
一点小基础
查看>>
PHP 自动加载类 __autoload() 方法
查看>>
JDK中的Timer和TimerTask详解(zhuan)
查看>>
【python练习】ATM&购物商城程序
查看>>
nginx 日志问题(\x22)
查看>>
装饰器、迭代器、生成器
查看>>
类对象作为类成员
查看>>
面向对象和面向过程的区别及优劣对比详解
查看>>